home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Texteditors / XDME / Src / filereq.c < prev    next >
C/C++ Source or Header  |  1996-09-26  |  15KB  |  751 lines

  1. /******************************************************************************
  2.  
  3.     MODUL
  4.     filereq.c
  5.  
  6.     DESCRIPTION
  7.     All routines that handle file-requesters. We try to open ASL and
  8.     if that's not possible, REQTOOLS.
  9.  
  10.     NOTES
  11.  
  12.     BUGS
  13.  
  14.     TODO
  15.  
  16.     EXAMPLES
  17.  
  18.     SEE ALSO
  19.  
  20.     INDEX
  21.  
  22.     HISTORY
  23.     28. Nov 1992    ada created
  24.  
  25. ******************************************************************************/
  26.  
  27. /**************************************
  28.         Includes
  29. **************************************/
  30. #include "defs.h"
  31.  
  32.  
  33. /**************************************
  34.         Globale Variable
  35. **************************************/
  36. Prototype void do_pattern    (void);
  37. Prototype void do_aslload    (void);
  38. Prototype int  aslsave         (void);
  39. Prototype void do_aslinsfile (void);
  40. Prototype void do_aslfont    (void);
  41. Prototype void do_reqload    (void);
  42. Prototype int  reqsave         (void);
  43. Prototype void do_reqinsfile (void);
  44. Prototype void do_reqfont    (void);
  45. Prototype void splitpath     (char *, char *, char *);
  46. Prototype void fixdirname    (char *);
  47.  
  48. Prototype struct FileRequester     * FReq;
  49. Prototype struct ReqToolsBase     * ReqToolsBase;
  50. Prototype struct rtFileRequester * RFReq;
  51.  
  52. struct FileRequester   * FReq;      /* File-Req. structure */
  53. struct rtFileRequester * RFReq;
  54. struct ReqToolsBase    * ReqToolsBase;
  55.  
  56.  
  57. /**************************************
  58.       Interne Defines & Strukturen
  59. **************************************/
  60.  
  61.  
  62. /**************************************
  63.         Interne Variable
  64. **************************************/
  65. static char pattern[64] = "";
  66. static char file[108];
  67. static char dir[PATHSIZE];
  68.  
  69.  
  70. /**************************************
  71.        Interne Prototypes
  72. **************************************/
  73.  
  74.  
  75.  
  76.  
  77. void do_pattern (void)
  78. {
  79.     strncpy (pattern, av[1], 63);
  80.     pattern[63] = 0;
  81. }
  82.  
  83.  
  84. void do_aslload (void)
  85. {
  86.     BPTR oldlock;
  87.     BOOL ret;
  88.  
  89.     oldlock = CurrentDir (Ep->dirlock);
  90.  
  91.     splitpath (Ep->name, file, dir);
  92.  
  93.     if (!stricmp (file, "unnamed"))
  94.     *file = 0;
  95.  
  96.     fixdirname (dir);
  97.  
  98.     if (AslBase)
  99.     {               /* If we have asl.library & requester */
  100.     if (!FReq)
  101.         FReq = AllocAslRequest (ASL_FileRequest, NULL);
  102.  
  103.     if (!FReq)
  104.     {
  105.         nomemory ();
  106.         return;
  107.     }
  108.  
  109.     ret = AslRequestTags ((APTR)FReq,
  110.         ASL_Hail,    "XDME Load New File",
  111.         ASL_OKText,    "Load",
  112.         ASL_Window,    Ep->win,
  113.         ASL_FuncFlags,    FILF_NEWIDCMP | FILF_PATGAD,
  114.         ASL_Dir,    dir,
  115.         ASL_File,    file,
  116.         ASL_Pattern,    pattern,
  117.         ASL_LeftEdge,    Ep->config.aslleft + Ep->win->LeftEdge,     /* use config coords */
  118.         ASL_TopEdge,    Ep->config.asltop + Ep->win->TopEdge,
  119.         ASL_Width,    Ep->config.aslwidth,
  120.         ASL_Height,    Ep->config.aslheight,
  121.         TAG_DONE
  122.     );
  123.  
  124.     Ep->config.asltop    = FReq->rf_TopEdge - Ep->win->TopEdge;     /* save coords */
  125.     Ep->config.aslleft   = FReq->rf_LeftEdge - Ep->win->LeftEdge;
  126.     Ep->config.aslwidth  = FReq->rf_Width;
  127.     Ep->config.aslheight = FReq->rf_Height;
  128.  
  129.     if (ret)
  130.     {
  131.         BPTR newlock;
  132.  
  133.         if ((newlock = Lock (FReq->rf_Dir, SHARED_LOCK)))
  134.         {
  135.         BPTR cd = CurrentDir (oldlock);
  136.  
  137.         Ep->dirlock = (long)newlock;
  138.  
  139.         strcpy (pattern, FReq->rf_Pat);
  140.  
  141.         av[0] = (UBYTE *)"n";
  142.         av[1] = (UBYTE *) FReq->rf_File;
  143.  
  144.         if (do_edit () == -1)
  145.         {
  146.             Ep->dirlock = (long)cd;
  147.             UnLock (newlock);
  148.         }
  149.         else
  150.             UnLock (cd);
  151.         }
  152.     } else
  153.     {
  154.         globalflags.Abortcommand = 1;
  155.         CurrentDir (oldlock);
  156.     }
  157.     } else
  158.     {           /* no asl.library? try reqtools */
  159.     do_reqload ();
  160.     }
  161. } /* do_aslload */
  162.  
  163.  
  164. int aslsave (void)
  165. {
  166.     BPTR oldlock = CurrentDir (Ep->dirlock);
  167.     BOOL ret;
  168.  
  169.     splitpath (Ep->name, file, dir);
  170.  
  171.     if (!stricmp (file, "unnamed"))
  172.     *file = 0;
  173.  
  174.     fixdirname (dir);
  175.  
  176.     if (AslBase)
  177.     {
  178.     if (!FReq)
  179.         FReq = AllocAslRequest (ASL_FileRequest, NULL);
  180.  
  181.     if (!FReq)
  182.     {
  183.         nomemory ();
  184.         return (FALSE);
  185.     }
  186.  
  187. loop:
  188.     ret = AslRequestTags( (APTR)FReq,
  189.         ASL_Hail,    "XDME Save File",
  190.         ASL_OKText,    "Save",
  191.         ASL_Window,    Ep->win,
  192.         ASL_FuncFlags,    FILF_NEWIDCMP | FILF_SAVE,
  193.         ASL_Dir,    dir,
  194.         ASL_File,    file,
  195.         ASL_LeftEdge,    Ep->config.aslleft + Ep->win->LeftEdge,     /* use config coords */
  196.         ASL_TopEdge,    Ep->config.asltop + Ep->win->TopEdge,
  197.         ASL_Width,    Ep->config.aslwidth,
  198.         ASL_Height,    Ep->config.aslheight,
  199.         TAG_DONE
  200.     );
  201.  
  202.     Ep->config.asltop    = FReq->rf_TopEdge - Ep->win->TopEdge;     /* save coords */
  203.     Ep->config.aslleft   = FReq->rf_LeftEdge - Ep->win->LeftEdge;
  204.     Ep->config.aslwidth  = FReq->rf_Width;
  205.     Ep->config.aslheight = FReq->rf_Height;
  206.  
  207.     if (ret)
  208.     {
  209.         BPTR tmp_lock;
  210.  
  211.         if (!stricmp (FReq->rf_File, "unnamed"))
  212.         {
  213.         error ("arpsave:\nCannot save file as\n`unnamed'");
  214.         *file = 0;
  215.         goto loop;
  216.         }
  217.  
  218.         CurrentDir (oldlock);
  219.  
  220.         strcpy (file, FReq->rf_File);
  221.         strcpy (dir, FReq->rf_Dir);
  222.         strcpy (pattern, FReq->rf_Pat);
  223.  
  224.         if (!*file)
  225.         {
  226.         error ("%s:\nYou must specify a name", av[0]);
  227.         goto loop;
  228.         }
  229.  
  230.         AddPart (dir, file, PATHSIZE);
  231.  
  232.         av[1] = (UBYTE *)dir;
  233.  
  234.         if ((tmp_lock = Lock (dir, ACCESS_READ)))
  235.         {
  236.         UnLock (tmp_lock);
  237.  
  238.         if (!getyn ("XDME Warning",
  239.             "The file\n`%s'\ndoes already exist."
  240.             "Do you want to overwrite it ?",
  241.             "Yes|No", dir) )
  242.             return (FALSE);
  243.         }
  244.  
  245.         return (do_saveas ());
  246.     } else
  247.     {
  248.         globalflags.Abortcommand = 1;
  249.         CurrentDir (oldlock);
  250.     }
  251.     } else
  252.     {
  253.     return (do_reqsave ());
  254.     }
  255.  
  256.     return (FALSE);
  257. } /* aslsave */
  258.  
  259.  
  260. void do_aslinsfile (void)
  261. {
  262.     BPTR oldlock = CurrentDir (Ep->dirlock);
  263.     BOOL ret;
  264.  
  265.     splitpath (Ep->name, file, dir);
  266.  
  267.     if (!stricmp (file, "unnamed"))
  268.     *file = 0;
  269.  
  270.     fixdirname (dir);
  271.  
  272.     if (AslBase)
  273.     {
  274.     if (!FReq)
  275.         FReq = AllocAslRequest (ASL_FileRequest, NULL);
  276.  
  277.     if (!FReq)
  278.     {
  279.         nomemory ();
  280.         return;
  281.     }
  282.  
  283.     ret = AslRequestTags ((APTR)FReq,
  284.         ASL_Hail,    "XDME Insert File",
  285.         ASL_OKText,    "Insert",
  286.         ASL_Window,    Ep->win,
  287.         ASL_FuncFlags,    FILF_NEWIDCMP | FILF_PATGAD,
  288.         ASL_Dir,    dir,
  289.         ASL_File,    file,
  290.         ASL_Pattern,    pattern,
  291.         ASL_LeftEdge,    Ep->config.aslleft + Ep->win->LeftEdge,     /* use config coords */
  292.         ASL_TopEdge,    Ep->config.asltop + Ep->win->TopEdge,
  293.         ASL_Width,    Ep->config.aslwidth,
  294.         ASL_Height,    Ep->config.aslheight,
  295.         TAG_DONE );
  296.  
  297.     Ep->config.asltop    = FReq->rf_TopEdge - Ep->win->TopEdge;     /* save coords */
  298.     Ep->config.aslleft   = FReq->rf_LeftEdge - Ep->win->LeftEdge;
  299.     Ep->config.aslwidth  = FReq->rf_Width;
  300.     Ep->config.aslheight = FReq->rf_Height;
  301.  
  302.     if (ret)
  303.     {
  304.         CurrentDir (oldlock);
  305.  
  306.         /* Fields are READ-ONLY */
  307.         strcpy (file, FReq->rf_File);
  308.         strcpy (dir, FReq->rf_Dir);
  309.         strcpy (pattern, FReq->rf_Pat);
  310.  
  311.         AddPart (dir, file, PATHSIZE);
  312.  
  313.         av[0] = (UBYTE *)"i";
  314.         av[1] = (UBYTE *)dir;
  315.  
  316.         do_edit ();
  317.     } else
  318.     {
  319.         globalflags.Abortcommand = 1;
  320.         CurrentDir (oldlock);
  321.     }
  322.     } else
  323.     {
  324.     do_reqinsfile ();
  325.     }
  326. } /* do_aslinsfile */
  327.  
  328.  
  329. void do_aslfont (void)
  330. {
  331.     if (AslBase)
  332.     {
  333.     struct FontRequester *fontreq;
  334.  
  335. #ifdef _DCC
  336.     ULONG fwin = (ULONG)Ep->win;  /* put ASL on correct screen */
  337. #endif
  338.  
  339.     struct TagItem FontTags[] =
  340.     {   /* DICE 2.06.37 allows us to initialize this here... */
  341. #ifdef _DCC
  342.         ASL_Window,     fwin,
  343.         ASL_LeftEdge,   Ep->config.aslleft + Ep->win->LeftEdge,    /* use config coords */
  344.         ASL_TopEdge,    Ep->config.asltop + Ep->win->TopEdge,
  345. #else
  346.         ASL_Window,     0L,
  347.         ASL_LeftEdge,   0L,
  348.         ASL_TopEdge,    0L,
  349. #endif
  350.         ASL_Hail,        (ULONG)"XDME fixed width font",
  351.         ASL_FuncFlags,  FILF_NEWIDCMP | FONF_FIXEDWIDTH,
  352.         /* Removed Min & MaxHeight since I cannot figure out what the
  353.            user may want */
  354.         TAG_DONE
  355.     };
  356.  
  357. #ifndef _DCC
  358.     FontTags[0].ti_Data = (ULONG)Ep->win;
  359.     FontTags[1].ti_Data = Ep->config.aslleft + Ep->win->LeftEdge;
  360.     FontTags[2].ti_Data = Ep->config.asltop + Ep->win->TopEdge;
  361. #endif
  362.  
  363.     if ((fontreq = (struct FontRequester *)
  364.                 AllocAslRequest (ASL_FontRequest,FontTags) ))
  365.     {
  366.  
  367.         if (AslRequest (fontreq, NULL))
  368.         {
  369.  
  370.         /*  Since we have GetFont() already, just pass
  371.          *   the name and size from fontreq's TextAttr to it.
  372.          *
  373.          *  What follows mimics SETFONT (in cmnd3.c)
  374.          */
  375.  
  376.         FONT * font = (FONT *)GetFont( fontreq->fo_Attr.ta_Name,
  377.                          (short) fontreq->fo_Attr.ta_YSize );
  378.         ED * ep = Ep;
  379.  
  380.         if (font)
  381.         {
  382.             if (ep->font)
  383.             CloseFont (ep->font);
  384.  
  385.             ep->font = font;
  386.  
  387.             SetFont (ep->win->RPort, font);
  388.             SetRast (ep->win->RPort, 0);
  389.  
  390.             RefreshWindowFrame (ep->win);
  391.  
  392.             set_window_params ();
  393.  
  394.             text_adjust (TRUE);
  395.         } else
  396.         {
  397.             error ("aslfont:\nUnable to find font\n%s/%ld", fontreq->fo_Attr.ta_Name,
  398.                fontreq->fo_Attr.ta_YSize);
  399.         }
  400.         }
  401.         else
  402.         globalflags.Abortcommand = 1;
  403.  
  404.         FreeAslRequest (fontreq);
  405.     }
  406.     else
  407.     {
  408.         nomemory ();
  409.     }
  410.     } else
  411.     {
  412.     do_reqfont ();
  413.     }
  414. } /* do_aslfont */
  415.  
  416.  
  417. /*  this little kludge gets a DIR: string for the ASL requester
  418.  */
  419.  
  420. void fixdirname (char * dir)
  421. {
  422.     if (!strlen (dir))
  423.     {              /* if no DIR; KLUDGE ALERT! */
  424.     if (NameFromLock (Ep->dirlock, dir, PATHSIZE)!=DOSTRUE)
  425.     {
  426.         dir[0] = 0; /* assumes NameFromLock doesn't clean up on err(??) */
  427.     }
  428.     }
  429. } /* fixdirname */
  430.  
  431.  
  432. /*
  433.  *  Search backwards for first ':' or '/' and split path there.
  434.  *  This subroutine may appear to be coded incorrectly to a novice
  435.  *  programmer.  It isn't [now].
  436.  */
  437.  
  438. void splitpath (char * name, char * file, char * dir)
  439. {
  440.     int i;
  441.  
  442.     strcpy (file, FilePart (name));
  443.  
  444.     i = (long)PathPart (name) - (long)name;
  445.  
  446.     movmem (name, dir, i);
  447.     dir[i] = 0;
  448. } /* splitpath */
  449.  
  450.  
  451. /*
  452.  *  The REQ interface uses the reqtools.library if it exists, else tries to
  453.  *  use the ARP interfafce.
  454.  */
  455.  
  456. void do_reqload (void)
  457. {
  458.     BPTR oldlock = CurrentDir (Ep->dirlock);
  459.  
  460.     splitpath (Ep->name, file, dir);
  461.  
  462.     if (!stricmp (file, "unnamed"))
  463.     *file = 0;
  464.  
  465.     fixdirname (dir);
  466.  
  467.     if (ReqToolsBase)
  468.     {             /* If we have req.library & requester */
  469.     if (!RFReq)
  470.         RFReq = rtAllocRequestA (RT_FILEREQ, NULL);
  471.  
  472.     if (!RFReq)
  473.     {
  474.         nomemory ();
  475.         return;
  476.     }
  477.  
  478.     rtChangeReqAttr (RFReq, RTFI_Dir, dir, TAG_DONE);
  479.  
  480.     if (rtFileRequest (RFReq, file, "XDME Load New File",
  481.         RTFI_OkText,    "Load",
  482.         RT_Window,    Ep->win,
  483.         RT_ReqPos,    REQPOS_TOPLEFTSCR,
  484.         RT_LeftOffset,    Ep->config.aslleft,
  485.         RT_TopOffset,    Ep->config.asltop,
  486.         RTFI_Height,    Ep->config.aslheight,
  487.         TAG_DONE ))
  488.         {
  489.         BPTR newlock;
  490.  
  491.         if ((newlock = Lock (RFReq->Dir, SHARED_LOCK)))
  492.         {
  493.         BPTR cd = CurrentDir (oldlock);
  494.  
  495.         Ep->dirlock = (long)newlock;
  496.  
  497.         strcpy (dir, RFReq->Dir);
  498.         AddPart (dir, file, PATHSIZE);
  499.  
  500.         av[0] = (UBYTE *)"n";
  501.         av[1] = (UBYTE *) file;
  502.  
  503.         if (do_edit () == -1)
  504.         {
  505.             Ep->dirlock = (long)cd;
  506.             UnLock (newlock);
  507.         }
  508.         else
  509.             UnLock (cd);
  510.         }
  511.     } else
  512.     {
  513.         globalflags.Abortcommand = 1;
  514.         CurrentDir (oldlock);
  515.     }
  516.     } else
  517.     {           /* no req.library? Gulp */
  518.     if (AslBase)
  519.         error ("reqload:\nNo ReqTools.Library\nTry ARPLOAD");
  520.     else
  521.         error ("For filerequester,\nI need REQ- or ASL.LIBRARY !");
  522.     }
  523. } /* do_reqload */
  524.  
  525.  
  526. int reqsave (void)
  527. {
  528.     BPTR oldlock = CurrentDir(Ep->dirlock);
  529.  
  530.     splitpath (Ep->name, file, dir);
  531.  
  532.     if (!stricmp (file, "unnamed"))
  533.     *file = 0;
  534.  
  535.     fixdirname (dir);
  536.  
  537.     if (ReqToolsBase)
  538.     {             /* If we have req.library & requester */
  539.     if (!RFReq)
  540.         RFReq = rtAllocRequestA (RT_FILEREQ, NULL);
  541.  
  542.     if (!RFReq)
  543.     {
  544.         nomemory ();
  545.         return (FALSE);
  546.     }
  547.  
  548.     rtChangeReqAttr (RFReq, RTFI_Dir, dir, TAG_DONE);
  549.  
  550. loop:
  551.     if (rtFileRequest (RFReq, file, "XDME Save File",
  552.         RTFI_OkText,    "Save",
  553.         RT_Window,    Ep->win,
  554.         RTFI_Flags,    FREQF_SAVE,
  555.         RT_ReqPos,    REQPOS_TOPLEFTSCR,
  556.         RT_LeftOffset,    Ep->config.aslleft,
  557.         RT_TopOffset,    Ep->config.asltop,
  558.         RTFI_Height,    Ep->config.aslheight,
  559.         TAG_DONE ))
  560.     {
  561.         BPTR tmp_lock;
  562.  
  563.         if (!stricmp (file, "unnamed"))
  564.         {
  565.         error ("arpsave:\nCannot save file as\n`unnamed'");
  566.         goto loop;
  567.         }
  568.  
  569.         CurrentDir (oldlock);
  570.  
  571.         strcpy (dir, RFReq->Dir);
  572.         AddPart (dir, file, PATHSIZE);
  573.  
  574.         if (!*file)
  575.         {
  576.         error ("%s:\nYou must specify a name", av[0]);
  577.         goto loop;
  578.         }
  579.  
  580.         av[1] = (UBYTE *)dir;
  581.  
  582.         if ((tmp_lock = Lock (dir, ACCESS_READ)))
  583.         {
  584.         UnLock (tmp_lock);
  585.  
  586.         if (!getyn ("XDME Warning",
  587.             "The file\n`%s'\ndoes already exist."
  588.             "Do you want to overwrite it ?",
  589.             "Yes|No", dir) )
  590.             return (FALSE);
  591.         }
  592.  
  593.         return (do_saveas ());
  594.     } else
  595.     {
  596.         globalflags.Abortcommand = 1;
  597.         CurrentDir (oldlock);
  598.     }
  599.     } else
  600.     {
  601.     if (AslBase)
  602.         error ("reqsave:\nNo ReqTools.Library\nTry ARPSAVE");
  603.     else
  604.         error ("For filerequester,\nI need REQ- or ASL.LIBRARY !");
  605.     }
  606.  
  607.     return (FALSE);
  608. } /* reqsave */
  609.  
  610.  
  611. void do_reqinsfile (void)
  612. {
  613.     BPTR oldlock = CurrentDir (Ep->dirlock);
  614.  
  615.     splitpath (Ep->name, file, dir);
  616.  
  617.     if (!stricmp (file, "unnamed"))
  618.     *file = 0;
  619.  
  620.     fixdirname (dir);
  621.  
  622.     if (ReqToolsBase)
  623.     {             /* If we have req.library & requester */
  624.     if (!RFReq)
  625.         RFReq = rtAllocRequestA (RT_FILEREQ, NULL);
  626.  
  627.     if (!RFReq)
  628.     {
  629.         nomemory ();
  630.         return;
  631.     }
  632.  
  633.     rtChangeReqAttr (RFReq, RTFI_Dir, dir, TAG_DONE);
  634.  
  635.     if (rtFileRequest (RFReq, file, "XDME Insert File",
  636.         RTFI_OkText,    "Load",
  637.         RT_ReqPos,    REQPOS_TOPLEFTSCR,
  638.         RT_Window,    Ep->win,
  639.         RT_LeftOffset,    Ep->config.aslleft,
  640.         RT_TopOffset,    Ep->config.asltop,
  641.         RTFI_Height,    Ep->config.aslheight,
  642.         TAG_DONE ))
  643.     {
  644.  
  645.         CurrentDir (oldlock);
  646.  
  647.         strcpy (dir, RFReq->Dir);
  648.         AddPart (dir, file, PATHSIZE);
  649.  
  650.         av[0] = (UBYTE *)"i";
  651.         av[1] = (UBYTE *)file;
  652.  
  653.         do_edit ();
  654.     } else
  655.     {
  656.         globalflags.Abortcommand = 1;
  657.         CurrentDir (oldlock);
  658.     }
  659.     } else
  660.     {
  661.     if (AslBase)
  662.         error ("reqinsfile:\nNo ReqTools.Library\nTry ARPINSFILE");
  663.     else
  664.         error ("For filerequester,\nI need REQ- or ASL.LIBRARY !");
  665.     }
  666. } /* do_reqinsfile */
  667.  
  668.  
  669. void do_reqfont (void)
  670. {
  671.     if (ReqToolsBase)
  672.     {
  673.     struct rtFontRequester *fontreq;
  674.  
  675. #ifdef _DCC
  676.     struct Window *fwin = Ep->win;    /* put ASL on correct screen */
  677. #endif
  678.  
  679.     struct TagItem FontTags[] =
  680.     {   /* DICE 2.06.37 allows us to initialize this here... */
  681. #ifdef _DCC
  682.         RT_Window,        fwin,
  683. #else
  684.         RT_Window,        NULL,
  685. #endif
  686.         RTFO_MinHeight, 6,
  687.         RTFO_MaxHeight, 24,
  688.         RTFO_Flags,     FREQF_FIXEDWIDTH, /* | FILF_NEWIDCMP */
  689.         TAG_DONE };
  690.  
  691. #ifndef _DCC
  692.         FontTags[0].ti_Data = (ULONG)Ep->win;
  693. #endif
  694.  
  695.     if ((fontreq = rtAllocRequestA (RT_FONTREQ, NULL)))
  696.     {
  697.         if (rtFontRequestA (fontreq, "XDME fixed width font", FontTags))
  698.         {
  699.  
  700.         /*  Since we have GetFont() already, just pass
  701.          *   the name and size from fontreq's TextAttr to it.
  702.          *
  703.          *  What follows mimics SETFONT (in cmnd3.c)
  704.          */
  705.  
  706.         FONT * font = (FONT *)GetFont (fontreq->Attr.ta_Name,
  707.                          (short) fontreq->Attr.ta_YSize );
  708.         ED   * ep   = Ep;
  709.  
  710.         if (font)
  711.         {
  712.             if (ep->font)
  713.             CloseFont (ep->font);
  714.  
  715.             ep->font = font;
  716.  
  717.             SetFont (ep->win->RPort, font);
  718.             SetRast (ep->win->RPort, 0);
  719.  
  720.             RefreshWindowFrame (ep->win);
  721.             set_window_params ();
  722.  
  723.             text_adjust (TRUE);
  724.         } else
  725.         {
  726.             error ("aslfont:\nUnable to find font\n%s/%ld", fontreq->Attr.ta_Name,
  727.                fontreq->Attr.ta_YSize);
  728.         }
  729.         }
  730.         else
  731.         globalflags.Abortcommand = 1;
  732.  
  733.         rtFreeRequest (fontreq);
  734.     } else
  735.     {
  736.         nomemory ();
  737.     }
  738.     } else
  739.     {
  740.     if (AslBase)
  741.         error ("reqfont:\nNo ReqTools.Library\nTry ARPFONT");
  742.     else
  743.         error ("Need ASL.LIBRARY or\nREQTOOLS.LIBRARY for\nfont requester !");
  744.     }
  745. } /* do_reqfont */
  746.  
  747.  
  748. /******************************************************************************
  749. *****  ENDE filereq.c
  750. ******************************************************************************/
  751.